#include "msgsolicitud.h"
#include "BuzonDeMensajes.h"
#include "Mensaje.h"
#include "MensajeDeSolicitudDeTirarDados.h"
#include "Ataque.h"
#include <sstream>
#include <stdlib.h>


MsgSolicitud :: MsgSolicitud(Gtk::Window& win, JuegoClientImp &jCl, Jugador &jug):
  jCliente(jCl),
  jugador(jug),
  parent(win)
{
};
	
void MsgSolicitud :: update(){
	BuzonDeMensajes* bm = dynamic_cast<BuzonDeMensajes*>(this->observable);
	if(bm != 0){
		Mensaje* msg = bm->getUltimo();
		MensajeDeSolicitudDeTirarDados *msgDados = dynamic_cast<MensajeDeSolicitudDeTirarDados*>(msg);
		if(msgDados != 0){
			Ataque& ataque(msgDados->getAtaque());
			if(ataque.getJugadorAtacante()->getColor() == jugador.getColor()){
				dadosAtacante(ataque);
				jCliente.tirarDados(&jugador, ataque.getCantidadDeDadosParaAtacar());
			}
			else{
				int cEjercitos = dadosDefensor(ataque);
			
				jCliente.tirarDados(&jugador,cEjercitos);
			}
			
		}
	}
}

void MsgSolicitud :: dadosAtacante(Ataque &ataque){
	
	Gtk::Dialog dialogAtacante("Atacante",parent);
	
	dialogAtacante.add_button("Lanzar", 0);
	
	this->declaracion.set_text("Atacas a "+jCliente.getJugador(ataque.getTerritorioEnemigo()->getEnPoderDe())->getNombre());
	this->territorios.set_text("Desde "+ataque.getTerritorioAtacante()->getNombre()+" a "+ataque.getTerritorioEnemigo()->getNombre());
	std::stringstream ejer;
	ejer<<ataque.getCantidadDeDadosParaAtacar();
	this->cantidadEjercitos.set_text("Ejercitos Atacantes = "+ejer.str());
	
	dialogAtacante.get_vbox()->pack_start(declaracion);
	dialogAtacante.get_vbox()->pack_start(territorios);
	dialogAtacante.get_vbox()->pack_start(cantidadEjercitos);
	
	dialogAtacante.show_all();
	dialogAtacante.run();
	dialogAtacante.hide();
}

int MsgSolicitud :: dadosDefensor(Ataque &ataque){
	
	Gtk::Dialog dialogDefensor("Defensor", parent);
	dialogDefensor.add_button("Lanzar",0);
	
	this->declaracionD.set_text("Eres atacado por "+ataque.getJugadorAtacante()->getNombre());
	this->territoriosD.set_text("Desde "+ataque.getTerritorioAtacante()->getNombre()+" a "+ataque.getTerritorioEnemigo()->getNombre());
	std::stringstream ejer;
	ejer<<ataque.getCantidadDeDadosParaAtacar();
	this->cantidadEjercitosD.set_text("Ejercitos Atacantes = "+ejer.str());
	
	this->defensa.set_text("Seleccione la cantidad de ejercitos para defender: ");
	Gtk::ComboBoxText combo;
	
	combo.append_text("1");
	if(ataque.getTerritorioEnemigo()->getCantidadDeEjercitos() > 1)
		combo.append_text("2");
	
	combo.set_active(0);
	
	dialogDefensor.get_vbox()->pack_start(declaracionD);
	dialogDefensor.get_vbox()->pack_start(territoriosD);
	dialogDefensor.get_vbox()->pack_start(cantidadEjercitosD);
	dialogDefensor.get_vbox()->pack_start(defensa);
	dialogDefensor.get_vbox()->pack_start(combo);
	
	dialogDefensor.show_all();
	dialogDefensor.run();
	dialogDefensor.hide();
	
	return atoi(combo.get_active_text().c_str());
}


